/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is Forte for Java, Community Edition. The Initial * Developer of the Original Code is Sun Microsystems, Inc. Portions * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.web.core.jsploader; import java.util.Set; import java.util.HashSet; import com.sun.jsp.JspException; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; import org.openide.loaders.DataFilter; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileStateInvalidException; /** High-level information about a JSP file, * used for compilation purposes. */ public class JspCompilationInfo { private FileObject jspFile; private ServletContextImpl context; private boolean isErrorPage; private DataObject[] includedFiles; private DataObject[] beans; private JspDataObject[] errorPage; private JspDataObject[] referencedPages; /** Creates a compilation info from a parser output. * Different error checking applies for different items. * If an error occurs, JspException is thrown. * <ul> * <li>getIncludedFiles() must convert succesfully all files, otherwise exception is thrown</li> * <li>getBeans() tries to convert beans, picks only java files, no exception is thrown</li> * <li>getErrorPage() tries to convert the error page, no exception is thrown</li> * <li>getReferencedPages() tries to convert the referenced pages, no exception is thrown</li> * </ul> */ public JspCompilationInfo(JspInfo info, FileObject jspFile) throws JspException, FileStateInvalidException { this.jspFile = jspFile; context = new ServletContextImpl(jspFile.getFileSystem()); // convert all data // error page isErrorPage = info.isErrorPage(); Set dObjSet; // beans dObjSet = convertBeans(info.getBeans()); beans = (DataObject[])dObjSet.toArray(new DataObject[dObjSet.size()]); // included files dObjSet = convertPages(info.getIncludedFiles(), DataFilter.ALL); includedFiles = (DataObject[])dObjSet.toArray(new DataObject[dObjSet.size()]); DataFilter jspFilter = new DataFilter() { public boolean acceptDataObject(DataObject obj) { return obj instanceof JspDataObject; } }; // error page dObjSet = convertPages(info.getErrorPage(), jspFilter); errorPage = (JspDataObject[])dObjSet.toArray(new JspDataObject[dObjSet.size()]); // referenced pages dObjSet = convertPages(info.getReferencedPages(), jspFilter); referencedPages = (JspDataObject[])dObjSet.toArray(new JspDataObject[dObjSet.size()]); } /** Assume that resource is a context-absolute URL * Returns null if the DataObject does not conform to the filter. */ private DataObject resourceToDataObject(String resource, DataFilter filter) { FileObject fo = context.getResourceAsObject(resource); DataObject dObj = null; if (fo != null) { try { dObj = DataObject.find(fo); if ((filter != null) && (!filter.acceptDataObject(dObj))) dObj = null; } catch (DataObjectNotFoundException e) { // do nothing } } return dObj; } /** Assume that clazz is a full class name * Returns null if neither *.java nor *.class was found. */ private DataObject clazzToDataObject(String clazz) { String resource = clazz.replace('.', '/'); DataObject dObj; dObj = resourceToDataObject(resource + ".java", DataFilter.ALL); // NOI18N if (dObj != null) return dObj; dObj = resourceToDataObject(resource + ".class", DataFilter.ALL); // NOI18N return dObj; } /** Converts URLs from urls[] to a set of DataObjects, applying the filter. */ private Set convertPages(String urls[], DataFilter filter) { HashSet pages = new HashSet(); for (int i = 0; i < urls.length; i++) { DataObject dObj = resourceToDataObject(urls[i], filter); if (dObj != null) pages.add(dObj); } return pages; } /** Converts class names from clazzes to a set of DataObjects. */ private Set convertBeans(String clazzes[]) { HashSet pages = new HashSet(); for (int i = 0; i < clazzes.length; i++) { DataObject dObj = clazzToDataObject(clazzes[i]); if (dObj != null) pages.add(dObj); } return pages; } public DataObject[] getIncludedFiles() { return includedFiles; } // deferred until we have JSP 1.1 /** TagLibaryInfo-s for used tag libraries. */ // public TagLibraryInfo[] getTagLibraries(); public DataObject[] getBeans() { return beans; } /** File used as the error page, * resolved to absolute URL within the context. */ public JspDataObject[] getErrorPage() { return errorPage; } /** Files referenced by include and forward actions, * resolved to absolute URL within the context. */ public JspDataObject[] getReferencedPages() { return referencedPages; } /** Returns whether this page is an error page. */ public boolean isErrorPage() { return isErrorPage; } }